{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from tensorflow.python.framework import ops\n",
    "\n",
    "ops.reset_default_graph()\n",
    "sess = tf.Session()\n",
    "tf.set_random_seed(5)\n",
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 简单函数参数推导"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 输入的数据，固定值\n",
    "x_val = 5.\n",
    "x_data = tf.placeholder(dtype=tf.float32)\n",
    "\n",
    "# 权重变量\n",
    "w = tf.Variable(tf.constant(4.))\n",
    "\n",
    "# 计算公式\n",
    "multiplication = tf.multiply(w, x_data)\n",
    "\n",
    "# 损失函数\n",
    "loss = tf.square(tf.subtract(multiplication, 50.))\n",
    "\n",
    "# 优化器\n",
    "opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "\n",
    "# 训练目标\n",
    "train = opt.minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimizing a Multiplication Gate Output to 50.\n",
      "7.0 * 5.0 = 35.0\n",
      "8.5 * 5.0 = 42.5\n",
      "9.25 * 5.0 = 46.25\n",
      "9.625 * 5.0 = 48.125\n",
      "9.8125 * 5.0 = 49.0625\n",
      "9.90625 * 5.0 = 49.5312\n",
      "9.95312 * 5.0 = 49.7656\n",
      "9.97656 * 5.0 = 49.8828\n",
      "9.98828 * 5.0 = 49.9414\n",
      "9.99414 * 5.0 = 49.9707\n"
     ]
    }
   ],
   "source": [
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "print('Optimizing a Multiplication Gate Output to 50.')\n",
    "for i in range(10):\n",
    "    # 执行本轮的优化\n",
    "    sess.run(train, feed_dict={x_data: x_val})\n",
    "    \n",
    "    # 获取最新的权重值\n",
    "    w_val = sess.run(w)\n",
    "    mult_output = sess.run(multiplication, feed_dict={x_data: x_val})\n",
    "    print(str(w_val) + ' * ' + str(x_val) + ' = ' + str(mult_output))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 多参数推导"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ops.reset_default_graph()\n",
    "sess = tf.Session()\n",
    "\n",
    "x_val = 5.\n",
    "x_data = tf.placeholder(dtype=tf.float32)\n",
    "\n",
    "w = tf.Variable(tf.constant(1.))\n",
    "b = tf.Variable(tf.constant(1.))\n",
    "\n",
    "two_gate = tf.add(tf.multiply(w, x_data), b)\n",
    "loss = tf.square(tf.subtract(two_gate, 50.))\n",
    "\n",
    "opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train = opt.minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Optimizing Two Gate Output to 50.\n",
      "5.4 * 5.0 + 1.88 = 28.88\n",
      "7.512 * 5.0 + 2.3024 = 39.8624\n",
      "8.52576 * 5.0 + 2.50515 = 45.134\n",
      "9.01236 * 5.0 + 2.60247 = 47.6643\n",
      "9.24593 * 5.0 + 2.64919 = 48.8789\n",
      "9.35805 * 5.0 + 2.67161 = 49.4619\n",
      "9.41186 * 5.0 + 2.68237 = 49.7417\n",
      "9.43769 * 5.0 + 2.68754 = 49.876\n",
      "9.45009 * 5.0 + 2.69002 = 49.9405\n",
      "9.45605 * 5.0 + 2.69121 = 49.9714\n"
     ]
    }
   ],
   "source": [
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "print('\\nOptimizing Two Gate Output to 50.')\n",
    "for i in range(10):\n",
    "    sess.run(train, feed_dict={x_data: x_val})\n",
    "    w_val, b_val = (sess.run(w), sess.run(b))\n",
    "    two_gate_output = sess.run(two_gate, feed_dict={x_data: x_val})\n",
    "    print(str(w_val) + ' * ' + str(x_val) + ' + ' + str(b_val) + ' = ' + str(two_gate_output))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 激活函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 50\n",
    "a1 = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "b1 = tf.Variable(tf.random_uniform(shape=[1,1]))\n",
    "a2 = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "b2 = tf.Variable(tf.random_uniform(shape=[1,1]))\n",
    "x = np.random.normal(2, 0.1, 500)\n",
    "x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "sigmoid_activation = tf.sigmoid(tf.add(tf.matmul(x_data, a1), b1))\n",
    "relu_activation = tf.nn.relu(tf.add(tf.matmul(x_data, a2), b2))\n",
    "\n",
    "loss1 = tf.reduce_mean(tf.square(tf.subtract(sigmoid_activation, 0.75)))\n",
    "loss2 = tf.reduce_mean(tf.square(tf.subtract(relu_activation, 0.75)))\n",
    "\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train_step_sigmoid = my_opt.minimize(loss1)\n",
    "train_step_relu = my_opt.minimize(loss2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Optimizing Sigmoid AND Relu Output to 0.75\n"
     ]
    }
   ],
   "source": [
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "print('\\nOptimizing Sigmoid AND Relu Output to 0.75')\n",
    "loss_vec_sigmoid = []\n",
    "loss_vec_relu = []\n",
    "activation_sigmoid = []\n",
    "activation_relu = []\n",
    "\n",
    "for i in range(750):\n",
    "    rand_indices = np.random.choice(len(x), size=batch_size)\n",
    "    x_vals = np.transpose([x[rand_indices]])\n",
    "    \n",
    "    sess.run(train_step_sigmoid, feed_dict={x_data: x_vals})\n",
    "    sess.run(train_step_relu, feed_dict={x_data: x_vals})\n",
    "\n",
    "    loss_vec_sigmoid.append(sess.run(loss1, feed_dict={x_data: x_vals}))\n",
    "    loss_vec_relu.append(sess.run(loss2, feed_dict={x_data: x_vals}))\n",
    "\n",
    "    activation_sigmoid.append(np.mean(sess.run(sigmoid_activation, feed_dict={x_data: x_vals})))\n",
    "    activation_relu.append(np.mean(sess.run(relu_activation, feed_dict={x_data: x_vals})))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nJQV/jz4a7AiMOSxVVVWWEI5jIkJiYiLFh9HiYX0f+du9G3bs7347Y9o/SwjHt8P9/O1Iwd9//Reo\nwqefBjsSY4wJCjtS8BcXB2VlBy5njGnRo48+ysCBAxk8eDAZGRl8/fXXAPzkJz9h9erVAV32hRde\nSFkzv+GHHnqIJ598ssXXZWRkcOWVB/6LjNzcXF57zfdXHSxZsoTbb7/9kGKdP38+X375pW/82Wef\n5Z///Och1XUk2ZGCv/h4KC8PdhTGHLUWLlzInDlzWLZsGZGRkWzfvp3q6moAXngh8P31vf/++wf9\nmjVr1lBXV8eCBQvYvXs3HTp0aLGsNylMnToVgMzMTDIzMw8p1vnz59OxY0fGjBkDwM0333xI9Rxp\ndqTgLy7OkoIxh6GwsJCkpCQiI92/fSYlJdGtWzcAxo0bh7eLmr///e/07duXkSNHcuONN3LrrbcC\ncN1113HLLbdw6qmncuKJJzJ//nxuuOEG+vfvz3XXXedbTlZWFunp6QwaNIi7777bN713795s99xr\n9Oijj9K3b19OP/101q1b12LMWVlZ/OhHP2LChAm8++67vuk5OTmcc845DBkyhGHDhrFx40buuece\nFixYQEZGBk8//TTz58/noosuor6+nt69ezc6SunTpw/btm3jvffeY9SoUQwdOpRzzjmHbdu2kZub\ny7PPPsvTTz9NRkYGCxYsaHQ0k52dzamnnsrgwYOZPHkypaWlvnV49913M3LkSPr27cuCBQsO+bNq\niR0p+Ovc2SWF2lp3iaoxR7E777yT7OzsI1pnRkYGf/zjH1ucP2HCBKZNm0bfvn0555xzmDJlCmPH\njm1UpqCggEceeYRly5YRGxvLWWedxZAhQ3zzS0tLWbhwIbNnz2bixIl88cUXvPDCC4wYMYLs7Gy6\ndOnC3XffzdKlS+ncuTMTJkxg1qxZ/OAHP/DVsXTpUmbMmEF2dja1tbUMGzaM4cOHNxvzzJkz+eij\nj1i7di1//vOffUcBV199Nffccw+TJ0+mqqqK+vp6Hn/8cZ588knmzJkDuL19gJCQECZNmsQ777zD\n9ddfz9dff02vXr044YQTOP300/nqq68QEV544QV+//vf89RTT3HzzTfTsWNH/ud//geAjz/+2BfT\nNddcw5///GfGjh3LAw88wMMPP+xb77W1tSxatIj333+fhx9+mLlz57b242sVO1LwN348/PrXLikY\n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\nmENk/6dwpJ14IpSWQmIiPPNMsKMxxpiAsL6PDkZ8PDzwACQlwauvwvr1cMEF7l6GEMuvQVFf787z\n2P9pG3NE2JbsYN1+O0ydCgkJMG0ajB7tksXf/tZQZu1amDfvyC63oMD9d/SBZGfv/2R4ff2h34j3\nwQeH9r/VX3wBS5c2P6+mpvl4y8oaDy9b1nh+ZSXcfz9cfDFERLQujro6d17oQHbsaBiur29d3W+9\nBWPGtP5ChKoqeP559/4Px4IFriuW4/Xmyvz8xuswPx/27Dly9VdUgH8T+6xZkJd3cHWowpYt8O23\nrX/NPfe4z3bnzsP/jhwsVT2qHsOHD9d2YdMm1ago1auvVr3gAtULL1QtKFD9wQ9UQfWss1Tr61W/\n+Ub1uedUzzxTNTtbdcYM95rrr1e9807V119XraxUveQS1fnz911OXp7qnDmuTlBdtcpNf/tt1a++\nUv3Tn1RnzlStq3N1ectt3ar6xReq27er7trVUN8Pf6jaq5eLbf161dpa1UWLVLdsUR0wQPUnP3Hl\ntmxRLSlRzc934yUlDXVv3uxifvdd1T17VG+9VfX//s+V27tX9dlnVc8+W/Xf/278uvJy1XfeUS0q\nUn3tNdWNGxvW1XXXuefKStVly1RDQlR/9ztX59ixrlxlpYv7uedUe/duqNcbk6pqaal7X1VVqlOm\nuHXu9YMfqEZEuOGNG1U/+sgN5+a6dVdfr/rBB66+e+5xn12XLqpTp6ouXqw6bJhqp06q333nXldU\n1PB5eONYt84t+8svVW+7zcWsqrp8ueojj6hWV7vP+ZJLGl4zcqT7/Orr3aO2VrWmxtX/8MOqTz3l\n1u/ate678M03rs7a2sbrYMYM1auuUh0/XvXJJ12Z+nr3+SQmqn78seonn7gYVd1ne8stqueeq1pc\nrJqernrCCa6ul19uWG+5ue7xzjuqL72kumaNalaWe5+qLtbbb1edO9e97+pqt95XrnTzd+5seH+q\nqgsWuDJeVVWq27apTprk6sjKcutO1X138/NVd+9235lt21QLC1Vvvln17rtdrB06uDpmznTjl1/e\n+DdUVqb661+7GL0xrF7tvic5Oa78Rx81rP/SUtXPPlOtqHD13Xuve81pp7nxzEw3/pe/uN9wTY37\nHnz3neq0ae79en8LqqrPPNPwGf31r+79ffWVex9Ll7rvnFd1teovf9n4cwXVxx7TwwUs0VZsY4O+\nkT/YR7tJCqruR6nqvvDffqv69NMNH+JNN7kvS6dODdPuu6/xhsA7HBraMPzHP7ofxo03uo1R0y8H\nuB/lbbc1ntatm2pMTMP4iSc2DJ93novxjTcapkVFNQzfeqtLUt7xJUvchsU7/sknLsF4xzMy3A8R\nVH/2M/d88sluXfjHfNttDeOnn+5+XM29n7g41dTUhvGnnnLPvXq5Or3Tx49XvfTS5uvo0cNtMEJC\n3HhaWsO84cPdj81//XmHV650GwVQHTq04fXR0arvvdf8skD1P/9RDQtzw95EAu4HP2xY47JPPNEw\n/OCDzddXX+/Wq3f8wgtVf/SjxmW86xxccoiObjx/0qTG4//4R+PxwYMbhh9+2O0geNfd73+/b0xv\nvtn4O9X0kZ7udiheeKHlMl9/3TAcHq7685+7uM85x+1UnHSSamxsQxn/70FOjktY3vF+/Vzyam45\n997b+Ps9fLjboWoa29q1Lrk0V4f3ewduR+TllxvG/T9jcAm2pfe8apXqwIGqkZGqn3+uesYZDd9z\nb5lRo/Z93dy5bsespXrr6g5rc2VJIRiWL1dNSnJfiKVL3TTvBqFHD7cH7P2A//Y3tyfb9IMfNqzx\nDwNU77/f7alOnap66qlub+yhhxrm+/8YfvrTfeu84gr3RfX/8nmHp05VfeUVF9uNNzZMP/lk1VNO\naRh//nn37J9MwP2o/Tc0l13mhnv1cnur3o1BdbVLkh07NpTv3t09//Wv7ijL/wf+2GNu+KKL3J5l\nSz+U1FTVceNckn3kEdWEhObL3XVXw7D/xvQ3v2n8vsGtD+/n590YnHmm29CA6uOPNy7ft687sgJ3\npLVggaqIG7/jjoaNgf8Gbvhwl5CuvNKt+z17VDt3blzvokUNe+7nn994Xb//vnsWadioJiS49T9l\nikugp5/upoeGqm7Y0JDwIiPdszfx33mn+07575zs7xER4XY6IiLc+vduyCZPduvJW65fv4adBu9j\n+vSGo2nvOrnmGvf5vPpq4x2re+9V7dq1YbxPH9WFCxvGr71W9dFHG95DVZXbK/cm5TlzVH/1K7cO\nr7/eret169x3u7n3deqpDcM//3nDd3XYMNcysHy5+z6cdJKL86qrDryuevZsqM//yO722/f/uubq\nnjHjsDZPlhTak8rKhixfVuYSRU2N21DecIPbm6qvd00t9fXuC7hpkyu7Y0fzewg1Ne5HNHu2G58/\nv6E55MIL3Y/jjjvcIXV9vVtmerrqiy+6MnPmqP7zn/vW+8EH7ofmPcy+/363t+VVX686b56L6cc/\ndj/EhQvdnt/nn7tD7qKihrLPPdcQl5f3/Wzd6vZWS0vd+EcfuThV3R4duD1+VbfRVHV7ecuXu3n/\n+7+uScpffb07LJ80qSFBzZvn1tecOa4ZpLjYJbBTT3XJq7CwYUP529/uu07KyhqP79zpNn4XXOCa\nILzxV1S4z9Abh/d9pqe7ujdsUI2Pd4m46WdaU+P2Puvq3MbD2+xVU9Ow/Npat44ee0z1++/dEc/W\nrW7eLbe4DWtTJSUNy9qyxcW6ZIlr5njnHRfX6tUN5QsLXVPN/Pnuu/XKK26D9tvfunX65psNTUHe\nJriCApdUVN28d991e+k1NS7xvf22+657Y/U2y8C+8e7c6V5/331umTNnuiak9evdcurrVVescAlz\n9+6GZTbl/c098ICL09+XX7rfh7c5cuNG10T1/ffuu//11w3rbvHixq/1Nu95bdzo1tXu3W7n69NP\n3c7Q6683JN277mr4Xqxc6XYICgrcb+uZZ1zTp//OGLj6pk1zMd1wg5vm38x0CFqbFOw+BdN+zZkD\ngwZB796Np6vC734Hl1/ecO9IS/bsgejo5udVVroT5717uz9Sqq+HQPStVVjoTk6OGuViFznyyzhU\ntbWuK5e2Nn06DBwI48a1/bLbSlmZu4y9Nf+Et3q1O0k+YoT7Lp58csO8mhr4z3/goosO67vT2vsU\nLCkYY8xxwG5eM8YYc9AsKRhjjPGxpGCMMcbHkoIxxhgfSwrGGGN8LCkYY4zxsaRgjDHGx5KCMcYY\nH0sKxhhjfCwpGGOM8bGkYIwxxseSgjHGGB9LCsYYY3wsKRhjjPGxpGCMMcbHkoIxxhgfSwrGGGN8\nLCkYY4zxsaRgjDHGx5KCMcYYH0sKxhhjfCwpGGOM8bGkYIwxxseSgjHGGB9LCsYYY3wCmhRE5HwR\nWSciOSJyTwtlrhCR1SKySkReC2Q8xhhj9i8sUBWLSCgwHTgXyAcWi8hsVV3tV6YPcC9wmqqWikiX\nQMVjjDHmwAJ5pDASyFHVTapaDcwAJjUpcyMwXVVLAVS1KIDxGGOMOYBAJoXuwPd+4/meaf76An1F\n5AsR+UpEzm+uIhG5SUSWiMiS4uLiAIVrjDEm2Ceaw4A+wDjgKuBvIhLftJCqPq+qmaqamZyc3MYh\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1192b9828>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\niVBSEBGRiP8faNs9w5NSa3AAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11931bb70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(activation_sigmoid, 'k-', label='Sigmoid Activation')\n",
    "plt.plot(activation_relu, 'r--', label='Relu Activation')\n",
    "plt.ylim([0, 1.0])\n",
    "plt.title('Activation Outputs')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Outputs')\n",
    "plt.legend(loc='upper right')\n",
    "plt.show()\n",
    "plt.plot(loss_vec_sigmoid, 'k-', label='Sigmoid Loss')\n",
    "plt.plot(loss_vec_relu, 'r--', label='Relu Loss')\n",
    "plt.ylim([0, 1.0])\n",
    "plt.title('Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend(loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
